package com.ssi.core.framework.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.ssi.core.framework.page.PageModel;

 
/**
 * 类说明：GenericDao DAO层泛型接口，定义基本的DAO功能 
 * @创建时间 Jan 8, 2011 4:01:31 PM
 * @创建人： Farley
 * @邮箱：kfy0521@163.com
 * @param <E>    实体�? 
 * @param <PK>   主键类，必须实现Serializable接口 
 */
public abstract interface GenericDao<E, PK extends Serializable> {  

    /** 
     * 插入�?个实体（在数据库INSERT�?条记录）
     * @param entity 实体对象 
     */  
    public void insert(E entity);  

    /** 
     * 修改�?个实体对象（UPDATE�?条记录） 
     * @param entity 实体对象 
     * @return 修改的对象个数，正常情况=1 
     */  
    public int update(E entity);  

    /** 
     * 按主键删除记�? 
     * @param primaryKey 主键对象 
     * @return 删除的对象个数，正常情况=1 
     */  
    public int delete(PK primaryKey);  

    /** 
     * 查询整表总记录数 
     * @return 整表总记录数 
     */  
    public int count();  

    /** 
     * 按主键取记录 
     * @param primaryKey 主键�? 
     * @return 记录实体对象，如果没有符合主键条件的记录，则返回null 
     */  
    public E get(PK primaryKey);  

    /** 
     * 取全部记�? 
     * @return 全部记录实体对象的List 
     */  
    public List<E> getAll();  
    
    /** 
     * 取全部记�? 
     * @param params 参数
     * @return 全部记录实体对象的List 
     */  
    public List<E> getAll(Map<String, Object> params);  

    /** 
     * 批量插入 
     * @param list 
     */  
    public void batchInsert(List<E> list);  

    /** 
     * 批量修改 
     * @param list 
     */  
    public void batchUpdate(List<E> list);  

    /** 
     * 批量删除 
     * @param list 
     */  
    public void batchDelete(List<PK> list);  
    
    
    /**
     * 通过指定的statementId查询结果�?
     * @param statementId
     * @return
     */
    public List<E> queryForList(String statementId);   
    
    /**
     * 通过指定的statementId查询结果集进行分�?
     * @param statementId
     * @param page
     * @return
     */
    public List<E> queryForList(String statementId,PageModel page);

    /**
     * 按照查询条件查询符合条件的全部记�?
     * @param statementId
     * @param parameters
     * @return
     */
    public  List<E> queryForList(String statementId,Object parameters) ;
    
    /**
     * 按照分页查询条件查询符合条件的记�?
     * @param statementId
     * @param parameters
     * @param page
     * @return
     */
    public  List<E> queryForList(String statementId,Object parameters,PageModel page);
    
    /**    
     * sql 查询.    
     * @param sql 直接sql的语�?(�?要防止注入式攻击)    
     */ 
    public List<E> queryForList(String statementId, String sql);   
    
    /**    
     * map查询.    
    * @param map 包含各种属�?�的查询    
     */     
    public List<E> queryForList(String statementId, Map map);      

    
    /**
     * 按照查询条件查询符合条件的记�?
     * @param statementId
     * @param parameters
     * @return
     */
    public E queryForObject(String statementId,Object parameters);
    
    /**
     * 按照条件更新符合条件的记�?
     * @param statementId
     * @param parameters
     */
    public void update(String statementId, Object parameters);
    
    /**
     * 按照条件删除符合条件的记�?
     * @param statementId
     * @param parameters
     */
    public void delete(String statementId, Object parameters);

}



